#coding:utf8
from django.shortcuts import render
from django.views.generic import View
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
from django.http import HttpResponse
from django.db.models import Q


from .models import Course,CourseResource,Video
from operation.models import UserFavorite,CourseComments,UserCource
from utils.mixin_until import LoginRequiredMixin


# Create your views here.


class CourseListView(View):
    def get(self,request):
        all_courses = Course.objects.all().order_by("-add_time")

        hot_courses = Course.objects.all().order_by("-click_nums")[0:3]
        #课程搜索
        search_keywords = request.GET.get('sort','')
        if search_keywords:
            all_courses = all_courses.filter(Q(name__icontains=search_keywords)|Q(desc__icontains=search_keywords)|Q(detail__icontains=search_keywords))

        # 课程排序
        sort = request.GET.get('sort', "")
        if sort:
            if sort == "students":
                all_courses = all_courses.order_by("-students")
            elif sort == "hot":
                all_courses = all_courses.order_by("-click_nums")



        #根据课程机构排序
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1

        p = Paginator(all_courses,6, request=request)
        courses = p.page(page)
        return render(request,"course-list.html",{
            "all_courses":courses,
            "sort":sort,
            "hot_courses":hot_courses,
        })


class CourseDetialView(View):
    """
    课程详情
    """
    def get(self,request,course_id):

        courses = Course.objects.filter(id=int(course_id))[0]

        #增加课程点击数
        courses.click_nums +=1
        courses.save()

        has_fav_course = False
        has_fav_org = False
        if request.user.is_authenticated():
            if UserFavorite.objects.filter(user=request.user, fav_id=course_id, fav_type=1):
                has_fav_course = True
            if UserFavorite.objects.filter(user=request.user, fav_id=courses.courseorg.id, fav_type=2):
                has_fav_org = True

        tag = courses.tag
        if tag:
            relate_course = Course.objects.filter(tag=tag)[:1]
        else:
            relate_course =[]
        return render(request,"course-detail.html",{
            "course":courses,
            "relate_course":relate_course,
            "has_fav_course": has_fav_course,
            "has_fav_org": has_fav_org
        })


class CourseInfoView(LoginRequiredMixin,View):
    """
    课程章节信息
    """

    def get(self, request, course_id):
        course = Course.objects.get(id=int(course_id))
        course.students += 1
        course.save()
        # 查询用户是否已经关联了该课程
        user_courses = UserCource.objects.filter(user=request.user, course=course)
        if not user_courses:
            user_course = UserCource(user=request.user, course=course)
            user_course.save()
        user_courses = UserCource.objects.filter(course=course)
        #遍历拿到所有用户的id
        user_ids = [user_course.user.id for user_course in user_courses]
        #orm数据库用法查询一组数据
        all_user_courses = UserCource.objects.filter(user__in=user_ids)
        #取出所有课程
        course_ids = [user_course.course.id for user_course in all_user_courses ]
        #获取学取过这门课程的用户学过其他课程的信息
        relate_courses = Course.objects.filter(id__in=course_ids).order_by("-click_nums")[:5]



        all_resources = CourseResource.objects.filter(cource=course)
        return render(request, "course-video.html", {
            "course": course,
            "all_resources":all_resources,
            "relate_courses":relate_courses

        })


class CourseCommentView(View):
    """
    课程章节信息
    """

    def get(self, request, course_id):
        course = Course.objects.get(id=int(course_id))

        all_resources = CourseResource.objects.filter(cource=course)
        all_coursecomment = CourseComments.objects.all()
        return render(request, "course-comment.html", {
            "course": course,
            "all_resources":all_resources,
            "all_coursecoment":all_coursecomment

        })



class AddComentsView(View):
    # 用户添加课程评论
    def post(self,request):
        if not request.user.is_authenticated():
            # 判断用户登录状态
            return HttpResponse('{"status":"fail","msg":"用户未登录"}', content_type='application/json')
        course_id=request.POST.get("course_id",0)
        comments=request.POST.get("comments","")
        if course_id>0 and comments:
            course_comments=CourseComments()
            course=Course.objects.get(id=int(course_id))
            course_comments.course=course
            course_comments.comments=comments
            course_comments.user=request.user
            course_comments.save()
            return HttpResponse('{"status":"success","msg":"添加成功"}', content_type='application/json')

        else:
            return HttpResponse('{"status":"fail","msg":"添加出错"}', content_type='application/json')


class CoursePlayView(View):
    """
    视频播放页面
    """
    def get(self, request, vedieo_id):
        video = Video.objects.get(id=int(vedieo_id))
        course = video.Lesson.cource
        course.students += 1
        course.save()
        # 查询用户是否已经关联了该课程
        user_courses = UserCource.objects.filter(user=request.user, course=course)
        if not user_courses:
            user_course = UserCource(user=request.user, course=course)
            user_course.save()
        user_courses = UserCource.objects.filter(course=course)
        # 遍历拿到所有用户的id
        user_ids = [user_course.user.id for user_course in user_courses]
        # orm数据库用法查询一组数据
        all_user_courses = UserCource.objects.filter(user__in=user_ids)
        # 取出所有课程
        course_ids = [user_course.course.id for user_course in all_user_courses]
        # 获取学取过这门课程的用户学过其他课程的信息
        relate_courses = Course.objects.filter(id__in=course_ids).order_by("-click_nums")[:5]

        all_resources = CourseResource.objects.filter(cource=course)
        return render(request, "course-play.html", {
            "course": course,
            "all_resources": all_resources,
            "relate_courses": relate_courses,
            "video":video

        })
